import {
	getUser
} from '@/api/user'
import {
	getCartNum
} from '@/api/store';
import {
	USER_INFO,
	TOKEN,
	CONFIG
} from '@/config/cachekey';
import Cache from '@/utils/cache'
import wechath5 from '@/utils/wechath5'


const state = {
	config: Cache.get(CONFIG) || {
		center_setting: {},
		index_setting: {},
		navigation_menu: [],
		navigation_setting: {},
		share: {}
	},
	userInfo: {
		user_money: 0,
		user_integral: 0,
		coupon: 0
	},
	token: Cache.get(TOKEN) || null,
	cartNum: "",
	sysInfo: {},
	// 需要提交的数组
	tranInfo:[],
	// 渲染的数组
	addressList:[],
	// 车辆信息
	carInfo:{},
	// 预约信息
	timeInfo:[],
	// 在首页sweiper所需要的数据
	swiperAddress:{}
};

const mutations = {
	setSwiperAddress(state, data){
		state.swiperAddress = data;
	},
	login(state, opt) {
		state.token = opt.token;
		Cache.set(TOKEN, opt.token, 59 * 24 * 60 * 60);
		this.dispatch('getUser')
	},
	logout(state) {
		state.token = undefined;
		state.userInfo = {
			user_money: 0,
			user_integral: 0,
			coupon: 0
		}
		Cache.remove(TOKEN);
	},
	setCartNum(state, num) {
		state.cartNum = num
	},
	setUserInfo(state, user) {
		state.userInfo = user
	},
	setConfig(state, data) {
		state.config = Object.assign(state.config, data)
		Cache.set(CONFIG, state.config);
	},
	setSystemInfo(state, data) {
		state.sysInfo = data
	},
	setTranInfo(state,list){
		state.tranInfo = list
	},
	setAddress(state,list){
		state.addressList = [];
		state.addressList = list
	},
	setCarInfo(state,data){
		state.carInfo = data
	},
	setTimeInfo(state,data){
		state.timeInfo = data;
	}
};

const actions = {
	getCartNum({
		state,
		commit
	}) {
		return new Promise(resolve => {
			if (!state.token) return uni.removeTabBarBadge({
				index: 3
			})
			getCartNum().then(res => {
				if (res.code == 1) {
					commit('setCartNum', res.data.num)
					if (!res.data.num) return uni.removeTabBarBadge({
						index: 3
					})
					uni.setTabBarBadge({
						index: 3,
						text: String(res.data.num)
					})
					resolve()
				}
			})
		})
	},
	getUser({
		state,
		commit
	}) {
		return new Promise(resolve => {
			getUser().then(res => {
				if (res.code == 1) {
					commit('setUserInfo', res.data)
				}
				resolve()
			})
		})
	},
	getSystemInfo({
		state,
		commit
	}) {
		uni.getSystemInfo({
			success: res => {
				let {
					statusBarHeight,
					platform,
				} = res;
				let navHeight;
				if (platform == 'ios' || platform == 'devtools') {
					navHeight = statusBarHeight + 44;
				} else {
					navHeight = statusBarHeight + 48;
				}
				commit('setSystemInfo', {
					...res,
					navHeight,
				})
				console.log(state)
			},
			fail(err) {
				console.log(err);
			}
		});
	},
	wxShare({
		state
	},opt) {
		// #ifdef H5
		const shareInfo = state.config.share
		const inviteCode = state.userInfo.distribution_code
		const href = window.location.href
		const sym = href.includes('?') ? '&' : '?'
		const option = {
			shareTitle: shareInfo.h5_share_title,
			shareLink: inviteCode ? `${href}${sym}invite_code=${inviteCode}` : href,
			shareImage: shareInfo.h5_share_image,
			shareDesc: shareInfo.h5_share_intro
		}
		wechath5.share(Object.assign(option, opt))
		// #endif
		
	}

};

export default {
	state,
	mutations,
	actions
};
